/**
 * 
 */
package com.module.osr.stormbringer.bus;

import com.module.stormbringer.globals.Globals;
import com.rpg.base.RPGConsts;
import com.rpg.base.flyweight.IOPCData;

/**
 * @author Donald
 */
public final class SBCharacter extends IOPCData {
	/** the character's base BodyFrame score. */
	private int		baseBodyFrame;
	/** the character's base Charisma score. */
	private float	baseCharisma;
	/** the character's base Constitution score. */
	private float	baseConstitution;
	/** the character's base Dexterity score. */
	private float	baseDexterity;
	/** the character's base Intelligence score. */
	private float	baseIntelligence;
	/** the character's base Life score. */
	private float	baseLife;
	/** the character's base MaxLife score. */
	private float	baseMaxLife;
	/** the character's base Power score. */
	private float	basePower;
	/** the character's base Size score. */
	private float	baseSize;
	/** the character's base Strength score. */
	private float	baseStrength;
	/** the full value of the character's BodyFrame score. */
	private int		fullBodyFrame;
	/** the full value of the character's Charisma score. */
	private float	fullCharisma;
	/** the full value of the character's Constitution score. */
	private float	fullConstitution;
	/** the full value of the character's Dexterity score. */
	private float	fullDexterity;
	/** the full value of the character's Intelligence score. */
	private float	fullIntelligence;
	/** the full value of the character's Life score. */
	private float	fullLife;
	/** the full value of the character's MaxLife score. */
	private float	fullMaxLife;
	/** the full value of the character's Power score. */
	private float	fullPower;
	/** the full value of the character's Size score. */
	private float	fullSize;
	/** the full value of the character's Strength score. */
	private float	fullStrength;
	private int		hairColor;
	private int		hairStyle		= Globals.HAIR_STYLE00;
	/** the character's height. */
	private int		height			= -1;
	/** the character's height in inches. */
	private int		heightInInches	= -1;
	/**
	 * the value of the modifier applied to the character's base BodyFrame
	 * score.
	 */
	private int		modBodyFrame;
	/**
	 * the value of the modifier applied to the character's base Charisma score.
	 */
	private float	modCharisma;
	/**
	 * the value of the modifier applied to the character's base Constitution
	 * score.
	 */
	private float	modConstitution;
	/**
	 * the value of the modifier applied to the character's base Dexterity
	 * score.
	 */
	private float	modDexterity;
	/**
	 * the value of the modifier applied to the character's base Intelligence
	 * score.
	 */
	private float	modIntelligence;
	/** the value of the modifier applied to the character's base Life score. */
	private float	modLife;
	/**
	 * the value of the modifier applied to the character's base MaxLife score.
	 */
	private float	modMaxLife;
	/**
	 * the value of the modifier applied to the character's base Power score.
	 */
	private float	modPower;
	/** the value of the modifier applied to the character's base Size score. */
	private float	modSize;
	/**
	 * the value of the modifier applied to the character's base Strength score.
	 */
	private float	modStrength;
	private int		muscle			= -1;
	private int		skinTone		= -1;
	private int		weightInPounds	= -1;
	/** Package level constructor. */
	SBCharacter() {
		super();
	}
	/**
	 * Adjusts the score modifier for the BodyFrame ability by a certain amount.
	 * @param val the modifier applied
	 */
	public void adjModBodyFrame(final float val) {
		modBodyFrame += val;
	}
	/**
	 * Adjusts the score modifier for the Charisma ability by a certain amount.
	 * @param val the modifier applied
	 */
	public void adjModCharisma(final float val) {
		modCharisma += val;
	}
	/**
	 * Adjusts the score modifier for the Constitution ability by a certain
	 * amount.
	 * @param val the modifier applied
	 */
	public void adjModConstitution(final float val) {
		modConstitution += val;
	}
	/**
	 * Adjusts the score modifier for the Dexterity ability by a certain amount.
	 * @param val the modifier applied
	 */
	public void adjModDexterity(final float val) {
		modDexterity += val;
	}
	/**
	 * Adjusts the score modifier for the Intelligence ability by a certain
	 * amount.
	 * @param val the modifier applied
	 */
	public void adjModIntelligence(final float val) {
		modIntelligence += val;
	}
	/**
	 * Adjusts the score modifier for the Life ability by a certain amount.
	 * @param val the modifier applied
	 */
	public void adjModLife(final float val) {
		modLife += val;
	}
	/**
	 * Adjusts the score modifier for the MaxLife ability by a certain amount.
	 * @param val the modifier applied
	 */
	public void adjModMaxLife(final float val) {
		modMaxLife += val;
	}
	/**
	 * Adjusts the score modifier for the Power ability by a certain amount.
	 * @param val the modifier applied
	 */
	public void adjModPower(final float val) {
		modPower += val;
	}
	/**
	 * Adjusts the score modifier for the Size ability by a certain amount.
	 * @param val the modifier applied
	 */
	public void adjModSize(final float val) {
		modSize += val;
	}
	/**
	 * Adjusts the score modifier for the Strength ability by a certain amount.
	 * @param val the modifier applied
	 */
	public void adjModStrength(final float val) {
		modStrength += val;
	}
	/**
	 * {@inheritDoc}
	 */
	@Override
	public final void clearModAbilityScores() {
		modBodyFrame = 0;
		modCharisma = 0;
		modConstitution = 0;
		modDexterity = 0;
		modIntelligence = 0;
		modLife = 0;
		modMaxLife = 0;
		modPower = 0;
		modSize = 0;
		modStrength = 0;
	}
	/**
	 * Gets the character's base BodyFrame score.
	 * @return <code>int</code>
	 */
	public int getBaseBodyFrame() {
		return baseBodyFrame;
	}
	/**
	 * Gets the character's base Charisma score.
	 * @return <code>float</code>
	 */
	public float getBaseCharisma() {
		return baseCharisma;
	}
	/**
	 * Gets the character's base Constitution score.
	 * @return <code>float</code>
	 */
	public float getBaseConstitution() {
		return baseConstitution;
	}
	/**
	 * Gets the character's base Dexterity score.
	 * @return <code>float</code>
	 */
	public float getBaseDexterity() {
		return baseDexterity;
	}
	/**
	 * Gets the character's base Intelligence score.
	 * @return <code>float</code>
	 */
	public float getBaseIntelligence() {
		return baseIntelligence;
	}
	/**
	 * Gets the character's base Life score.
	 * @return <code>float</code>
	 */
	public float getBaseLife() {
		return baseLife;
	}
	/**
	 * Gets the character's base MaxLife score.
	 * @return <code>float</code>
	 */
	public float getBaseMaxLife() {
		return baseMaxLife;
	}
	/**
	 * Gets the character's base Power score.
	 * @return <code>float</code>
	 */
	public float getBasePower() {
		return basePower;
	}
	/**
	 * Gets the character's base Size score.
	 * @return <code>float</code>
	 */
	public float getBaseSize() {
		return baseSize;
	}
	/**
	 * Gets the character's base Strength score.
	 * @return <code>float</code>
	 */
	public float getBaseStrength() {
		return baseStrength;
	}
	/**
	 * Gets the full value of the character's BodyFrame score.
	 * @return <code>int</code>
	 */
	public int getFullBodyFrame() {
		return fullBodyFrame;
	}
	/**
	 * Gets the full value of the character's Charisma score.
	 * @return <code>float</code>
	 */
	public float getFullCharisma() {
		return fullCharisma;
	}
	/**
	 * Gets the full value of the character's Constitution score.
	 * @return <code>float</code>
	 */
	public float getFullConstitution() {
		return fullConstitution;
	}
	/**
	 * Gets the full value of the character's Dexterity score.
	 * @return <code>float</code>
	 */
	public float getFullDexterity() {
		return fullDexterity;
	}
	/**
	 * Gets the full value of the character's Intelligence score.
	 * @return <code>float</code>
	 */
	public float getFullIntelligence() {
		return fullIntelligence;
	}
	/**
	 * Gets the full value of the character's Life score.
	 * @return <code>float</code>
	 */
	public float getFullLife() {
		return fullLife;
	}
	/**
	 * Gets the full value of the character's MaxLife score.
	 * @return <code>float</code>
	 */
	public float getFullMaxLife() {
		return fullMaxLife;
	}
	/**
	 * Gets the full value of the character's Power score.
	 * @return <code>float</code>
	 */
	public float getFullPower() {
		return fullPower;
	}
	/**
	 * Gets the full value of the character's Size score.
	 * @return <code>float</code>
	 */
	public float getFullSize() {
		return fullSize;
	}
	/**
	 * Gets the full value of the character's Strength score.
	 * @return <code>float</code>
	 */
	public float getFullStrength() {
		return fullStrength;
	}
	/**
	 * Gets the hairColor
	 * @return {@link int}
	 */
	public int getHairColor() {
		return hairColor;
	}
	/**
	 * Gets the hairStyle
	 * @return {@link int}
	 */
	public int getHairStyle() {
		return hairStyle;
	}
	/**
	 * Gets the height
	 * @return {@link int}
	 */
	public int getHeight() {
		return height;
	}
	/**
	 * Gets the heightInInches
	 * @return {@link int}
	 */
	public int getHeightInInches() {
		return heightInInches;
	}
	/**
	 * Gets the value of the modifier applied to the character's base BodyFrame
	 * score.
	 * @return <code>int</code>
	 */
	public int getModBodyFrame() {
		return modBodyFrame;
	}
	/**
	 * Gets the value of the modifier applied to the character's base Charisma
	 * score.
	 * @return <code>float</code>
	 */
	public float getModCharisma() {
		return modCharisma;
	}
	/**
	 * Gets the value of the modifier applied to the character's base
	 * Constitution score.
	 * @return <code>float</code>
	 */
	public float getModConstitution() {
		return modConstitution;
	}
	/**
	 * Gets the value of the modifier applied to the character's base Dexterity
	 * score.
	 * @return <code>float</code>
	 */
	public float getModDexterity() {
		return modDexterity;
	}
	/**
	 * Gets the value of the modifier applied to the character's base
	 * Intelligence score.
	 * @return <code>float</code>
	 */
	public float getModIntelligence() {
		return modIntelligence;
	}
	/**
	 * Gets the value of the modifier applied to the character's base Life
	 * score.
	 * @return <code>float</code>
	 */
	public float getModLife() {
		return modLife;
	}
	/**
	 * Gets the value of the modifier applied to the character's base MaxLife
	 * score.
	 * @return <code>float</code>
	 */
	public float getModMaxLife() {
		return modMaxLife;
	}
	/**
	 * Gets the value of the modifier applied to the character's base Power
	 * score.
	 * @return <code>float</code>
	 */
	public float getModPower() {
		return modPower;
	}
	/**
	 * Gets the value of the modifier applied to the character's base Size
	 * score.
	 * @return <code>float</code>
	 */
	public float getModSize() {
		return modSize;
	}
	/**
	 * Gets the value of the modifier applied to the character's base Strength
	 * score.
	 * @return <code>float</code>
	 */
	public float getModStrength() {
		return modStrength;
	}
	/**
	 * Gets the muscle
	 * @return {@link int}
	 */
	public int getMuscle() {
		return muscle;
	}
	/**
	 * Gets the skinTone
	 * @return {@link int}
	 */
	public int getSkinTone() {
		return skinTone;
	}
	/**
	 * Gets the weightInPounds
	 * @return {@link int}
	 */
	public int getWeightInPounds() {
		return weightInPounds;
	}
	/**
	 * {@inheritDoc}
	 */
	@Override
	protected void init() {
		super.setName(new char[] { 'N', 'a', 'm', 'e', 'l', 'e', 's', 's' });
		super.setGender(-1);
		super.setRace(-1);
		super.setProfession(-1);
		setBaseStrength(-999);
		setBaseConstitution(-999);
		setBaseSize(-999);
		setBaseIntelligence(-999);
		setBasePower(-999);
		setBaseDexterity(-999);
		setBaseCharisma(-999);
		SBPlayer.getInstance().computePlayerFullStats(this);
	}
	public void setAverageSchmo(final int gender) {
		setGender(gender);
		if (getSkinTone() < 0) {
			setSkinTone(RPGConsts.SKIN_01CELT);
			setHeight(RPGConsts.HEIGHT_00AVERAGE);
			setBaseBodyFrame(RPGConsts.BUILD_01MEDIUM);
			setMuscle(RPGConsts.MUSCLE_00AVERAGE);
		}
	}
	/**
	 * Sets the character's base BodyFrame score.
	 * @param val the new value
	 */
	public void setBaseBodyFrame(final int val) {
		baseBodyFrame = val;
	}
	/**
	 * Sets the character's base Charisma score.
	 * @param val the new value
	 */
	public void setBaseCharisma(final float val) {
		baseCharisma = val;
	}
	/**
	 * Sets the character's base Constitution score.
	 * @param val the new value
	 */
	public void setBaseConstitution(final float val) {
		baseConstitution = val;
	}
	/**
	 * Sets the character's base Dexterity score.
	 * @param val the new value
	 */
	public void setBaseDexterity(final float val) {
		baseDexterity = val;
	}
	/**
	 * Sets the character's base Intelligence score.
	 * @param val the new value
	 */
	public void setBaseIntelligence(final float val) {
		baseIntelligence = val;
	}
	/**
	 * Sets the character's base Life score.
	 * @param val the new value
	 */
	public void setBaseLife(final float val) {
		baseLife = val;
	}
	/**
	 * Sets the character's base MaxLife score.
	 * @param val the new value
	 */
	public void setBaseMaxLife(final float val) {
		baseMaxLife = val;
	}
	/**
	 * Sets the character's base Power score.
	 * @param val the new value
	 */
	public void setBasePower(final float val) {
		basePower = val;
	}
	/**
	 * Sets the character's base Size score.
	 * @param val the new value
	 */
	public void setBaseSize(final float val) {
		baseSize = val;
	}
	/**
	 * Sets the character's base Strength score.
	 * @param val the new value
	 */
	public void setBaseStrength(final float val) {
		baseStrength = val;
	}
	/**
	 * Sets the full value of the character's BodyFrame score.
	 * @param val the new value
	 */
	public void setFullBodyFrame(final int val) {
		fullBodyFrame = val;
	}
	/**
	 * Sets the full value of the character's Charisma score.
	 * @param val the new value
	 */
	public void setFullCharisma(final float val) {
		fullCharisma = val;
	}
	/**
	 * Sets the full value of the character's Constitution score.
	 * @param val the new value
	 */
	public void setFullConstitution(final float val) {
		fullConstitution = val;
	}
	/**
	 * Sets the full value of the character's Dexterity score.
	 * @param val the new value
	 */
	public void setFullDexterity(final float val) {
		fullDexterity = val;
	}
	/**
	 * Sets the full value of the character's Intelligence score.
	 * @param val the new value
	 */
	public void setFullIntelligence(final float val) {
		fullIntelligence = val;
	}
	/**
	 * Sets the full value of the character's Life score.
	 * @param val the new value
	 */
	public void setFullLife(final float val) {
		fullLife = val;
	}
	/**
	 * Sets the full value of the character's MaxLife score.
	 * @param val the new value
	 */
	public void setFullMaxLife(final float val) {
		fullMaxLife = val;
	}
	/**
	 * Sets the full value of the character's Power score.
	 * @param val the new value
	 */
	public void setFullPower(final float val) {
		fullPower = val;
	}
	/**
	 * Sets the full value of the character's Size score.
	 * @param val the new value
	 */
	public void setFullSize(final float val) {
		fullSize = val;
	}
	/**
	 * Sets the full value of the character's Strength score.
	 * @param val the new value
	 */
	public void setFullStrength(final float val) {
		fullStrength = val;
	}
	/**
	 * Sets the hairColor
	 * @param hairColor the hairColor to set
	 */
	public void setHairColor(int hairColor) {
		this.hairColor = hairColor;
	}
	/**
	 * Sets the hairStyle
	 * @param hairStyle the hairStyle to set
	 */
	public void setHairStyle(int hairStyle) {
		this.hairStyle = hairStyle;
	}
	/**
	 * Sets the height
	 * @param height the height to set
	 */
	public void setHeight(int height) {
		this.height = height;
	}
	/**
	 * Sets the heightInInches
	 * @param heightInInches the heightInInches to set
	 */
	public void setHeightInInches(int heightInInches) {
		this.heightInInches = heightInInches;
	}
	/**
	 * Sets the value of the modifier applied to character's base BodyFrame
	 * score.
	 * @param val the new value
	 */
	public void setModBodyFrame(final int val) {
		modBodyFrame = val;
	}
	/**
	 * Sets the value of the modifier applied to character's base Charisma
	 * score.
	 * @param val the new value
	 */
	public void setModCharisma(final float val) {
		modCharisma = val;
	}
	/**
	 * Sets the value of the modifier applied to character's base Constitution
	 * score.
	 * @param val the new value
	 */
	public void setModConstitution(final float val) {
		modConstitution = val;
	}
	/**
	 * Sets the value of the modifier applied to character's base Dexterity
	 * score.
	 * @param val the new value
	 */
	public void setModDexterity(final float val) {
		modDexterity = val;
	}
	/**
	 * Sets the value of the modifier applied to character's base Intelligence
	 * score.
	 * @param val the new value
	 */
	public void setModIntelligence(final float val) {
		modIntelligence = val;
	}
	/**
	 * Sets the value of the modifier applied to character's base Life score.
	 * @param val the new value
	 */
	public void setModLife(final float val) {
		modLife = val;
	}
	/**
	 * Sets the value of the modifier applied to character's base MaxLife score.
	 * @param val the new value
	 */
	public void setModMaxLife(final float val) {
		modMaxLife = val;
	}
	/**
	 * Sets the value of the modifier applied to character's base Power score.
	 * @param val the new value
	 */
	public void setModPower(final float val) {
		modPower = val;
	}
	/**
	 * Sets the value of the modifier applied to character's base Size score.
	 * @param val the new value
	 */
	public void setModSize(final float val) {
		modSize = val;
	}
	/**
	 * Sets the value of the modifier applied to character's base Strength
	 * score.
	 * @param val the new value
	 */
	public void setModStrength(final float val) {
		modStrength = val;
	}
	/**
	 * Sets the muscle
	 * @param muscle the muscle to set
	 */
	public void setMuscle(int muscle) {
		this.muscle = muscle;
	}
	/**
	 * Sets the skinTone
	 * @param skinTone the skinTone to set
	 */
	public void setSkinTone(int skinTone) {
		this.skinTone = skinTone;
	}
	/**
	 * Sets the weightInPounds
	 * @param weightInPounds the weightInPounds to set
	 */
	public void setWeightInPounds(int weightInPounds) {
		this.weightInPounds = weightInPounds;
	}
}
